package com.zhouyu.springboot;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Map;

public class ZhouyuOnClassCondition implements Condition {

    /**
     *找到被@ZhouyuConditionalOnClass注解修饰的方法
     * 获取这个注解的value
     * 加载这个类，如果pom依赖包含这个类，那么就可以加载到。如果不包含，就加载不到。
     */
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

        Map<String, Object> annotationAttributes = metadata.getAnnotationAttributes(ZhouyuConditionalOnClass.class.getName());
        String className = (String) annotationAttributes.get("value");

        try {
            context.getClassLoader().loadClass(className);
            return true;
        } catch (ClassNotFoundException e) {
           return false;
        }

    }
}
